package queixa.reps;

import queixa.Queixa;
import util.factory.FabricaRepositorio;
import util.repGeral.IRepositorioRegistro;
import util.repGeral.Registro;
import excecoes.ObjetoInexistenteException;
import excecoes.RepositorioException;
import fachada.Fachada;

public class RepositorioQueixa implements IRepositorioQueixa {


	//DELEGATION
	private IRepositorioRegistro repRegistro;
	
	// SINGLETON
	private static RepositorioQueixa instance = null;

	/*public RepositorioQueixaLista() {
		this.listaContas = new LinkedList();
	}
	*/
	private RepositorioQueixa() {
		// inicializando o atributo delegation
		this.repRegistro = FabricaRepositorio.getRepRegistroPorTipo(Fachada.getTipoRep());		
	}
	public static IRepositorioQueixa getInstance() {
		if (instance == null) {
			instance = new RepositorioQueixa();
		}
		return instance;
	}	
	//SINGLETON
   
	/* (non-Javadoc)
	 * @see queixa.reps.IRepositorioQueixa#insere(queixa.Queixa)
	 */
	public int insere(Queixa q) throws RepositorioException {
		return this.repRegistro.insere(q);
	}

	/* (non-Javadoc)
	 * @see queixa.reps.IRepositorioQueixa#procura(int)
	 */
	public Queixa procura(int codigo) throws ObjetoInexistenteException, RepositorioException {
		Registro r = this.repRegistro.procura(codigo);
		return (Queixa)r;
	}

	/* (non-Javadoc)
	 * @see queixa.reps.IRepositorioQueixa#existe(int)
	 */
	public boolean existe(int codigo) throws RepositorioException {
		boolean retorno = this.repRegistro.existe(codigo);
		return retorno;

	}

	/* (non-Javadoc)
	 * @see queixa.reps.IRepositorioQueixa#atualiza(queixa.Queixa)
	 */
	public void atualiza(Queixa q) throws RepositorioException, ObjetoInexistenteException{
	    this.repRegistro.atualiza(q);
	}

	/* (non-Javadoc)
	 * @see queixa.reps.IRepositorioQueixa#deleta(int)
	 */
	public void deleta(int codigo) throws RepositorioException,
			ObjetoInexistenteException {
		this.repRegistro.deleta(codigo);
	}

	/* (non-Javadoc)
	 * @see queixa.reps.IRepositorioQueixa#size()
	 */
	public int size() {
		return this.repRegistro.size();
	}

	public Queixa getElemento(int posicao) {
		return (Queixa) this.repRegistro.getElement(posicao);
	}
	public IteratorQueixa getIterator() {
		IteratorQueixa iterator = new IteratorQueixa(this.repRegistro.getIterator());
		return iterator;
	}

}
